package algorithm.arrayAlgorithm;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName: HasGroupsSizeX
 * @Description 914. 卡牌分组
 * 给定一副牌，每张牌上都写着一个整数。
 * 此时，你需要选定一个数字 X，使我们可以将整副牌按下述规则分成 1 组或更多组：
 * 每组都有 X 张牌。
 * 组内所有的牌上都写着相同的整数。
 * @Author skywingking
 * @Date 2022/1/8 10:39 下午
 **/
public class HasGroupsSizeX {
    public boolean hasGroupsSizeX(int[] deck) {
        if (deck == null || deck.length <= 1) {
            return false;
        }
        Map<Integer, Integer> digitalStatistic = new HashMap<>();
        for (int n : deck) {
            if (digitalStatistic.containsKey(n)) {
                digitalStatistic.put(n, digitalStatistic.get(n) + 1);
            } else {
                digitalStatistic.put(n, 1);
            }
        }
        int x = 2;
        boolean hasX = true;
        while (true) {
            for (Integer i : digitalStatistic.keySet()) {
                if (digitalStatistic.get(i) < x) {
                    return false;
                }
                if (digitalStatistic.get(i) % x != 0) {
                    hasX = false;
                    break;
                }
            }
            if (hasX) {
                return true;
            }
            hasX = true;
            x++;
        }
    }

}